作者:akun | 来源:互联网 | 2023-05-20 19:57
篇首语:本文由编程笔记#小编为大家整理,主要介绍了四层负载均衡和七层负载均衡的探究相关的知识,希望对你有一定的参考价值。 文章目录 前言概述详细探究四层负载均衡七层的负载均衡 二者区别1. 技
篇首语:本文由编程笔记#小编为大家整理,主要介绍了四层负载均衡和七层负载均衡的探究相关的知识,希望对你有一定的参考价值。
文章目录
前言
关于负载均衡,经常听到四层负载均衡和七层负载均衡的说法,也看了很多文章,整理的乱的很,也是给我整懵了,之前还以为是四个层都是负载均衡呢(ps:这是不正确的),所以这些到底是啥意思呢?他们之间有什么关系和区别呢?
下面我们来一起探究一下:
概述
我们先用一句话来说:四层负载均衡就是工作在计算机网络OSI七层分层的第四层(传输层)的,七层负载军和则是工作在第七层(应用层)的。
首先回顾一下OSI网络的七层结构:
我们知道了四层是第四层,七层是第七层,那么再看,也就是说:
- 四层负载均衡是基于IP+端口(TCP/UDP,例如:60.233.126.66:10)的负载均衡
- 七层负载均衡是基于URL(HTTP等,例如:http://www.test.com/uua)等应用层信息的负载均衡。
扩展:其实还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡,他们一般是对硬件进行配置。
- 二层负载均衡(mac)
一般是用虚拟mac地址
方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应。 - 三层负载均衡(ip)
一般采用虚拟IP地址
方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应。 - 四层负载均衡(tcp)
用虚拟ip+port
接收请求,再转发到对应的真实机器。 - 七层负载均衡(http)
用虚拟的url或主机名
接收请求,再转向相应的处理服务器。
在实际应用中,比较常见的就是四层负载及七层负载。
详细探究
总的来说:所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。
四层负载均衡
四层的负载均衡就是基于IP+端口的负载均衡:在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
对应的负载均衡器称为四层交换机(L4 switch),主要分析IP层及TCP/UDP层,实现四层负载均衡。此种负载均衡器不理解应用协议(如HTTP/FTP/mysql等等),常见例子有:LVS,F5。
七层的负载均衡
注意:没有四层是绝对不可能有七层的
七层的负载均衡,就是在四层的基础上,再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
二者区别
1. 技术原理区别
四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。
负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。
2.应用场景区别
七层因为可以代理任意修改和处理用户的请求,所以可以使整个应用更加智能化和安全,代价就是设计和配置会更复杂。所以是否有必要使用七层负载均衡是一个需要权衡的问题。
现在的7层负载均衡,主要还是着重于应用HTTP协议,所以其应用范围主要是众多的网站或者内部信息平台等基于B/S开发的系统。 4层负载均衡则对应其他TCP应用,例如基于C/S开发的ERP等系统。
其他4、7负载均衡内容 也可以参考下nginx的官网文档:https://www.nginx.com/resources/glossary/layer-4-load-balancing/